package conson.tech.manage.facade.job;

import conson.tech.manage.coupons.service.CouponActivityService;
import conson.tech.manage.coupons.service.CouponsCenterService;
import conson.tech.manage.coupons.service.CouponsService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * InterfaceName: CouponSchedule
 * Description: 优惠券模块定时任务
 * Author: XYF
 * Date: 2020/7/24 1:06
 * Version: 1.0
 */
@Slf4j
@Component
public class CouponSchedule {

    @Autowired
    CouponActivityService couponActivityService;

    @Autowired
    CouponsService couponsService;

    @Autowired
    private CouponsCenterService couponsCenterService;


    /**
     * 定时修改 定向发放的领券活动的状态（每个整点）
     *
     * @return void
     */
    @Async
    @Scheduled(cron = "0 0 */1 * * ? ")
    public void updateActivity() {

        log.info("定时修改 定向发放的领券活动的状态开始");
        couponActivityService.updateActivity();
        log.info("定时修改 定向发放的领券活动的状态结束");
    }

    /**
     * 定时修改发放的优惠券中的优惠券的状态，每天凌晨2点
     *
     * @return void
     */
    @Async
    @Scheduled(cron = "0 0 2 * * ? ")
    public void updateCouponState() {

        log.info("定时修改发放的优惠券中的优惠券的状态开始");
        couponActivityService.updateCouponState();
        log.info("定时修改发放的优惠券中的优惠券的状态结束");
    }

    /**
     * 定时发放优惠券给用户
     *
     * @return void
     */
    @Async
    @Scheduled(cron = "0 0 2/1 * * ? ")
    public void grantCoupons() {

        log.info("定时发放优惠券给用户开始");
        couponActivityService.grantCoupons();
        log.info("定时发放优惠券给用户结束");
    }

    /**
     * 定时 月初统计上个月的财务报表
     *
     * @return void
     */
    @Async
    @Scheduled(cron = "0 0 0 1 * ?")
    public void settlement() {

        log.info("定时 月底报表结算开始");
        couponActivityService.settlement();
        log.info("定时 月底报表结算结束");
    }

    /**
     * 定时将限时抢活动的库存进行补充 每天晚上 23:59:59 进行
     *
     * @return void
     */
    @Async
    @Scheduled(cron = "59 59 23 * * ?")
    public void updateTimeActivityStock() {

        log.info("定时将限时抢活动的库存进行补充开始");
        couponsCenterService.updateTimeActivityStock();
        log.info("定时将限时抢活动的库存进行补充结束");
    }

}
